/**
 * img-manager.js
 * 实现图片的上传、管理
 * 从页面中选择图片，
 * 上传到服务端，服务端接收图片数据
 * 存储到特定的路径下。
 */

const http = require("http");
const path = require("path");
const fs = require("fs");
const basePath = "http://localhost:3000";
const { formidable } = require("formidable");

http.createServer(async (req, res) => {
/**资源路径是upload，get请求时返回upload.html页面 */
    let urlObj = new URL(basePath + req.url);
    if(urlObj.pathname == "/upload" 
        && req.method == "GET") {
        let filePath = path.join(__dirname, "upload.html");
        let fileContent = fs.readFileSync(filePath);
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(fileContent);
    }
    if(urlObj.pathname == "/upload"
        && req.method == "POST") {
            let uploadPath = path.join(__dirname, "files");
            let form = formidable({
                uploadDir: uploadPath,
                keepExtensions: true
            })
            let result = await form.parse(req);
            console.log(result);
            /**
             * npm install formidable
             */

        }
    
    if(urlObj.pathname == "/list"
        && req.method == "GET") {
        let fileList = fs.readdirSync(path.join(__dirname, "files"));
        res.end(JSON.stringify(fileList));
    }

    if(urlObj.pathname.indexOf(".png") > 0) {
        let imgPath = path.join(__dirname, "files", urlObj.pathname);
        let fileContent = fs.readFileSync(imgPath);
        res.writeHead(200, {"Content-Type": "image/png"});
        res.end(fileContent);
    }

    /**
     * 添加数据库的处理逻辑，上传文件做数据存储
     * 渲染图片列表过程，需要完成数据库的查询并渲染列表
     * 
     * 将数据库操作完成库的封装过程，注意一下引入数据库操作模块的过程
     * 如果业务比较复杂，如何避免重复的引入数据库操作模块
     * 
     * 多文件的上传处理过程、添加文件类型的筛选、文件大小的筛选、上传
     * 文件数量的筛选等过程。
     */
}).listen(3000);
console.log("server is listening 3000");

